import { forEach } from "../util";
import Module from "./module";

export default class ModuleCollection {
    constructor(options){
        //注册模块
        this.register([],options);
        console.log(options,'oooooooo')
    }
    register(path,rootModule){

        let newModule = new Module(rootModule);
        rootModule.newModule = newModule; //当前注册的模块上做一个映射
        // {
        //     _raw: rootModule,
        //     _children: {},
        //     state: rootModule.state
        // }
        if(path.length === 0){
            this.root = newModule;
        }else{
            let parent = path.slice(0,-1).reduce((memo,current)=>{
                return memo.getChild(current);
            },this.root);
            parent.addChild(path[path.length - 1],newModule);
         }
        if(rootModule.modules){
            forEach(rootModule.modules,(module,moduleName)=>{
                 this.register([...path,moduleName],module);
            })
        }
    }
    getNamespace(path){ //命名空间
        let root = this.root;
        return path.reduce((namespace,key)=>{
            root = root.getChild(key);
            return namespace + (root.namespaced ? key + '/' : '')
        },'');
    }
}

//格式化树结构
// this.root = {
//     _raw: xxx,
//     _children: {
//         a:{
//             _raw:xxx,
//             state: a.state,
//             _children:xxx
//         },
//         b: {
//             _raw:xxx,
//             state: b.state
//         }
//     },
//     state: xxx.state
// }
